INT_2D
The INT_2D function computes the double integral of a bivariate function using iterated Gaussian quadrature. The algorithm’s transformation data is provided in tabulated form with 15 decimal accuracy.
This routine is written in the IDL language. Its source code can be found in the file int_2d.pro
in the lib
subdirectory of the IDL distribution.
Examples
See Additional Examples for more information on using INT_2D.
Example 1
Compute the double integral of the bivariate function.
FUNCTION Fxy, x, y
RETURN, y*COS(x^5)
END
; Define the limits of integration for y as a function of x:
FUNCTION PQ_Limits, x
RETURN, [0.0, x^2]
END
; Define limits of integration for x:
AB_Limits = [0.0, 2.0]
; Using the function and limits defined above, integrate with 48
; and 96 point formulas using a dy-dx order of integration and
; double-precision arithmetic:
PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 48, /DOUBLE)
PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 96, /DOUBLE)
INT_2D with 48 transformation points yields: 0.055142668
INT_2D with 96 transformation points yields: 0.055142668
Syntax
Result = INT_2D( Fxy, AB_Limits, PQ_Limits, Pts [, /DOUBLE] [, /ORDER] )
Return Value
Returns a double value containing the integral.
Arguments
Fxy
A scalar string specifying the name of a user-supplied IDL function that defines the bivariate function to be integrated. For dy/dx integration (the default, or if the ORDER keyword is explicitly set to zero), the Fxy function must be able to accept a scalar value for X and a vector for Y, and must return a vector of the same length as Y. For dx/dy integration (if the ORDER keyword is set), the Fxy function must be able to accept a vector for X and a scalar value for Y, and must return a vector of the same length as X.
For example, if we wish to integrate the following function:
We define a function FXY to express this relationship in the IDL language:
FUNCTION fxy, X, Y
RETURN, EXP(-X^2. -Y^2.)
END
AB_Limits
A two-element vector containing the lower (A) and upper (B) limits of integration with respect to the outside variable (dependent on ORDER). ORDER=0 will be dydx, in which case AB_Limits relates to the x-variable. ORDER=1 will be dxdy, in which case AB_Limits relates to the y-variable.
PQ_Limits
A scalar string specifying the name of a user-supplied IDL function that defines the lower (P(x)) and upper (Q(x)) limits of integration with respect to the inner variable (dependent on ORDER).
ORDER=0 will be dydx, in which case PQ_Limits relates to the y-variable. For example, you can write the following IDL function to represent the limits of integration with respect to y:
FUNCTION PQ_limits, X
RETURN, [-SQRT(16.0 - X^2), SQRT(16.0 - X^2)]
END
ORDER=1 will be dxdy, in which case PQ_Limits relates to the x-variable. The function must accept x and return a two-element vector result. For example, you can write the following IDL function to represent the limits of integration with respect to x:
FUNCTION PQ_limits, Y
RETURN, [-SQRT(16.0 - Y^2), SQRT(16.0 - Y^2)]
END
Pts
The number of transformation points used in the computation. Possible values are: 6, 10, 20, 48, or 96.
Keywords
DOUBLE
Set this keyword to force the computation to be done in double-precision arithmetic.
ORDER
A scalar value of either 0 or 1. If set to 0, the integral is computed using a dy-dx order of integration. If set to 1, the integral is computed using a dx-dy order of integration.
Additional Examples
Example 2
Compute the double integral of the bivariate function:
FUNCTION Fxy, x, y
RETURN, y*COS(x^5)
END
; Define the limits of integration for y as a function of x:
FUNCTION PQ_Limits, y
RETURN, [sqrt(y), 2.0]
END
; Define limits of integration for x:
AB_Limits = [0.0, 4.0]
; Using the function and limits defined above, integrate with 48
; and 96 point formulas using a dy-dx order of integration and
; double-precision arithmetic:
PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 48, /DOUBLE, /ORDER)
PRINT, INT_2D('Fxy', AB_Limits, 'PQ_Limits', 96, /DOUBLE, /ORDER)
INT_2D with 48 transformation points yields: 0.055142678
INT_2D with 96 transformation points yields: 0.055142668
The exact solution (7 decimal accuracy) is: 0.055142668
Version History
Pre 4.0 |
Introduced |